/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package adminasistencia;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;
import java.awt.Component;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author micael
 */
public class consultas {

      /**
     * Conexión a la base de datos
     */
    public Connection dbConnection;
     /**
     * Consultas Preparadas
     */
    private PreparedStatement guardarStmt;
    private PreparedStatement identificarStmt;
    private PreparedStatement verificarStmt;
    private PreparedStatement insertarRegistro;
    public PreparedStatement consultarRegistro;
    private Component rootPane;
    private PreparedStatement actualizarRegistro;
    private PreparedStatement compruebaRegistro;
    private PreparedStatement guardarRegistro;

     public consultas() {

     }
      public void initDB() {
        try {
            try {
                //Cargar el driver ODBC
                Class.forName("com.mysql.jdbc.Driver");
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(consultas.class.getName()).log(Level.SEVERE, null, ex);
            }

            //Conexion a la base de datos
           dbConnection = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/db_asistencia","asistencia","db2011");
           Statement stm = (Statement) dbConnection.createStatement();
 if (dbConnection != null) {
            System.out.println("Conexión a base de datos  ... EXITOSA");
         }
      }
      catch(SQLException ex) {
         System.out.println("Hubo un problema al intentar conectarse con la base de datos");
      }



    }
      /**
     * Se libera la conexion y recursos utilizados en las query
     */
    private void destroyDB() {
        try {
            //Se cierran todas la sentencias
            guardarStmt.close();
            identificarStmt.close();
            verificarStmt.close();
            insertarRegistro.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

     public void reviza_run(int run, String pass){
         initDB();
        try {
            consultarRegistro = (PreparedStatement) dbConnection.prepareStatement("SELECT * FROM funcionarios WHERE run = "+run+" and pass = "+pass);
            ResultSet existe = consultarRegistro.executeQuery();

            if (existe.next()) {
                String nombre = existe.getString("nombre");
               String apellido =  existe.getString("apellidoP");
               int tipo = existe.getInt("tipo");

               if(tipo == 2180){
                    paneladmin pan = new paneladmin(run);
                pan.setVisible(true);//Permitimos que se vea
               }
               else{

                panel po = new panel(run);
                po.setVisible(true);//Permitimos que se vea
               }
               
            }

            else
            {
                JOptionPane.showMessageDialog(rootPane, "Funcionario no conocido, intente de nuevo");

            }
        } catch (SQLException ex) {
            Logger.getLogger(consultas.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

     public void comprobar_registro(int run) throws SQLException, UnknownHostException {
        initDB();
        consultarRegistro = (PreparedStatement) dbConnection.prepareStatement("SELECT * FROM asistencia WHERE run = "+run+" and DATE(Fecha_hora_Entrada) = DATE(NOW()) and estado='P'");
        ResultSet existe = consultarRegistro.executeQuery();

        if(existe.next()) {
                    JOptionPane.showMessageDialog(rootPane, "ya marcaste entrada, ahora marcaras salida");
            actualizarRegistro = (PreparedStatement) dbConnection.prepareStatement("UPDATE asistencia SET Fecha_hora_Salida=NOW(), estado='A' WHERE run = "+run+" and DATE(Fecha_hora_Entrada) = DATE(NOW()) and estado='P'");
            System.out.println(actualizarRegistro);
             try {

                 //Ejecuta la sentencia
                 actualizarRegistro.execute();
                 JOptionPane.showMessageDialog(rootPane, "SALIDA MARCADA");

                  } catch (SQLException ex) {
                //Si ocurre un error lo indica en la consola
            System.out.println("Error al guardar los datos del REGISTRO.");
        }
        }
        else {
             compruebaRegistro = (PreparedStatement) dbConnection.prepareStatement("SELECT * FROM asistencia WHERE run = "+run+" and DATE(Fecha_hora_Entrada) = DATE(NOW()) and estado='A'");
             ResultSet marco = compruebaRegistro.executeQuery();
             if(marco.next()){
                  JOptionPane.showMessageDialog(rootPane, "ya marcaste tu salida por el dia de hoy");

             }
            else {


        JOptionPane.showMessageDialog(rootPane, "Primer marcaje del Dia");
        InetAddress direccion = InetAddress.getLocalHost();
            byte direccionIp[] = direccion.getAddress();
            int direccion1 = direccionIp[0] + 256;
             int direccion2 = direccionIp[1] + 256;
            int direccion3 = direccionIp[3] + 256;
            String ip =  (direccion1 +"."+ direccion2+"."+ direccionIp[2] +"."+ direccion3);
            System.out.println(ip);


           java.util.Date utilDate = new java.util.Date(); //fecha actual
           long lnMilisegundos = utilDate.getTime();
           java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(lnMilisegundos);

           System.out.println(sqlTimestamp);
           insertarRegistro = (PreparedStatement) dbConnection.prepareStatement("INSERT INTO asistencia (run, Fecha_hora_Entrada, Fecha_hora_Salida, IP, Estado) VALUES ('"+run+"',NOW(),'0000-00-00 00:00:00','"+ip+"','P')");
           System.out.println(insertarRegistro);

           try {

                 //Ejecuta la sentencia
                 insertarRegistro.execute();
                  JOptionPane.showMessageDialog(rootPane, "ENTRADA REGISTRADA");

                  } catch (SQLException ex) {
                //Si ocurre un error lo indica en la consola
            System.out.println("Error al guardar los datos del REGISTRO.");
        }
        }
    }
    }
     public void guardar_registro(int run,String nombre, String apellidoP, String apellidoM, int departamento, int area, int lugar, int tipo, String cargo, int anexo, String correo, String fecha, int pass) throws SQLException{
         initDB();
         guardarRegistro = (PreparedStatement) dbConnection.prepareStatement("INSERT INTO funcionarios (run,nombre,apellidoP,apellidoM,departamento,area,lugar,tipo,cargo,anexo,correo,fecha,pass) VALUES ('"+run+"','"+nombre+"','"+apellidoP+"','"+apellidoM+"','"+departamento+"','"+area+"','"+lugar+"','"+tipo+"','"+cargo+"','"+anexo+"','"+correo+"','"+fecha+"','"+pass+"')");
         System.out.println(guardarRegistro);
         guardarRegistro.execute();
                 JOptionPane.showMessageDialog(null, "INGRESO DEL FUNCIONARIO "+nombre+" "+apellidoP+" EXITOSO");

     }
      public void actualiza_asistencia(int id_asistencia,String fecha_inicio, String fecha_salida) throws SQLException{
         initDB();
         if (fecha_salida.equals("Presente")){
         actualizarRegistro =(PreparedStatement) dbConnection.prepareStatement("UPDATE asistencia SET Fecha_hora_Entrada = '"+fecha_inicio+"', Fecha_hora_Salida = '0000-00-00 00:00:00' WHERE ID_Asistencia = "+id_asistencia+";");
         }
         else
         {
         actualizarRegistro =(PreparedStatement) dbConnection.prepareStatement("UPDATE asistencia SET Fecha_hora_Entrada = '"+fecha_inicio+"', Fecha_hora_Salida = '"+fecha_salida+"' WHERE ID_Asistencia = "+id_asistencia+";");
         }
         System.out.println(actualizarRegistro);
         actualizarRegistro.execute();
                 JOptionPane.showMessageDialog(null, "Actualización Exitosa");
     }
}
